<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

include_once 'principal.php';

/**
 *
 * Controller para ações de Livro
 * @author Douglas Rafael
 * @package controllers     
 */
class Livro extends Principal {

    public function __construct() {
        parent::__construct();
        //Verifica se o usuário estar logado no sistema
        $this->_verificaLogado();

        $this->config->load('pagination');
        $this->title = 'Gerenciamento de Livro || ' . $this->title;
        $this->title_page = 'Gerenciamento de item | Livro';
        $this->message_geral = '<h2 class="title-alert">informações gerais</h2>
                        <p><b>ALT + N</b> Abre o formulário para cadastrar um novo livro.</p>';
    }

    public function index() {
        $this->listar();
    }

    /**
     * Método para <b>Carregar</b> a view com a lista de Livroes
     */
    public function listar() {
        try {
            $this->load->view('fixed/menu_item');
            $this->_verificaPermissao( ControleAcesso::CONSULTAR_LIVRO );
            $this->session->unset_userdata('codigoItem');
            
            // Removendo a variavel 'searchterm' da sessão
            $this->session->unset_userdata('searchterm');

            $init = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
            $total_pagina = $this->config->item('per_page');
            $livros = $this->facade->selectLivros($init, $total_pagina);
            $total_rows = $this->facade->quantLivro();
            
            if($livros == NULL)
                Mensagem::setMensagemAviso ("Não foi encontrado nenhum livro cadastrado. Clique em <b>Adicionar livro</b> e insira!");

            // paginação
            $config['base_url'] = base_url() . "livro/listar";
            $config['total_rows'] = $total_rows;
            $config['per_page'] = 15;

            $this->pagination->initialize($config);

            $data['total_rows'] = $config['total_rows'];
            $data['pagination'] = $this->pagination->create_links();
            $data['livros'] = $livros;

            $this->load->view('livro_list', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }
    
    /**
     * Método para Cadastrar Livro
     */
    public function cadastrar() {
        try {
            $this->title = 'Cadastro de Livro || ' . $this->title;
            $this->title_page = 'Cadastro de item | Livro';
            $this->message_geral = '<h2 class="title-alert">informações gerais</h2><p>Não é permitido cadastros duplicados de <b>LIVROS</b>, então verifique se o item a ser inserido não possui cadastrado.</p>';
            
            $this->load->view('livro_form');
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

    /**
     * Método para Atualizar Livro
     */
    public function atualizar() {
        try {
            $this->load->library('form_validation');
            $this->form_validation->set_rules("codigoUp", "Código", "trim|required|is_natural|exact_lenght[6]|xss_clean");
            $this->form_validation->set_rules("nomeUp", "Nome", "trim|required|min_length[5]|xss_clean");
            $this->form_validation->set_rules("descricaoUp", "Descrição", "trim|min_length[5]|max_length[500]|xss_clean");
            $this->form_validation->set_rules("sequenciaUp", "Sequência", "trim|is_natural|xss_clean");
            $this->form_validation->set_rules("statusUp", "Status", "trim|required|is_natural|max_length[1]|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->updateLivro();
                Mensagem::setMensagemSucesso("Livro<b> " . $this->input->post('nomeUp') . "</b> atualizada com sucesso.");

                $this->session->userdata('searchterm') ? $this->buscar() : $this->listar();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

    /**
     * Método para Excluir Livro
     */
    public function excluir() {
        try {
            $this->load->library('form_validation');
            $this->form_validation->set_rules("codigo", "Código", "trim|required|xss_clean");
            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[5]|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->deleteLivro();

                Mensagem::setMensagemSucesso("Livro(s) excluída com sucesso.");

                $this->listar();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

    /**
     * Método para Buscar Livro
     */
    public function buscar() {
        try {
            $searchterm = $this->facade->searchtermHandler($this->input->get_post('term', TRUE));
            $init = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
            $total_rows = $this->facade->quantSearchLivro($searchterm);
            $total_pagina = $this->config->item('per_page');
            $Livroes = $this->facade->searchLivro($init, $total_pagina, $searchterm);

            //paginação
            $config['base_url'] = base_url() . "Livro/buscar";
            $config['total_rows'] = $total_rows;
            $this->pagination->initialize($config);

            $data['Livros'] = $Livroes;
            $data['total_rows'] = $config['total_rows'];
            $data['pagination'] = $this->pagination->create_links();

            if ($total_rows == 0)
                Mensagem::setMensagem("Nenhum registro foi encontrado para essa pesquisa: <b> $searchterm </b>", "aviso");

            $this->load->view('Livro_list', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }
    
    public function cadastrarAutor() {
        try {
            $this->_verificaPermissao(ControleAcesso::CADASTRAR_AUTOR);
            $this->load->library('form_validation');
            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[5]|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->insertAutor();

                Mensagem::setMensagemSucesso("Autor<b> " . $this->input->post('nome') . "</b> cadastrado com sucesso.");

                $this->cadastrar();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }
    
    
    public function cadastrarEditora() {
        try {
            $this->_verificaPermissao(ControleAcesso::CADASTRAR_EDITORA);

            $this->load->library('form_validation');

            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[3]|xss_clean");
            $this->form_validation->set_rules("telefone", "Telefone", "trim|exact_length[15]|xss_clean");
            $this->form_validation->set_rules("email", "E-Mail", "trim|valid_email|xss_clean");
            $this->form_validation->set_rules("site", "Site", "trim|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->insertEditora();

                Mensagem::setMensagemSucesso("Editora<b> " . $this->input->post('nome') . "</b> cadastrada com sucesso.");
                $this->listar();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }
    
    /**
     * Método para Cadastrar Categoria
     */
    public function cadastrarCategoria() {
        try {
            $this->_verificaPermissao( ControleAcesso::CADASTRAR_CATEGORIA );
            
            $this->load->library('form_validation');
            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[5]|xss_clean");
            $this->form_validation->set_rules("descricao", "Descrição", "trim|min_length[5]|max_length[500]|xss_clean");
            $this->form_validation->set_rules("sequencia", "Sequência", "trim|is_natural|xss_clean");
            $this->form_validation->set_rules("status", "Status", "trim|required|is_natural|max_length[1]|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->insertCategoria();

                Mensagem::setMensagemSucesso("Categoria<b> " . $this->input->post('nome') . "</b> cadastrada com sucesso.");

                $this->listar();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }
    
    /**
     * Método para selecionar um livro de acordo com o código
     * @param type $codigo
     * @throws ExceptionValidacao 
     */
    public function selecionado() {
        try {
            $codigo = $this->uri->segment(3);

            $data['livro'] = $this->facade->getLivro($codigo);
            if ($data['livro']->movimentacao->status_venda == 1)
                $data['preco'] = $this->facade->getPreco($codigo);
            $data['vendas'] = $this->facade->getVendas($codigo, 0, 5);
            $data['emprestimos'] = $this->facade->getEmprestimos($codigo, 0, 5);

            $this->load->view('livro_get', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->selecionado();
        }
    }

    /**
     * Método para selecionar um livro de acordo com o código
     * @param type $codigo
     * @throws ExceptionValidacao 
     */
    public function vendas() {
        try {
            $this->_verificaPermissao( ControleAcesso::CONSULTAR_LIVRO );
            
            $init = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
            $total_pagina = 2;
            $vendas = $this->facade->getVendas($init, $total_pagina);
            $total_rows = $this->facade->quantLivro();
            
            // paginação
            $config['base_url'] = base_url() . "livro/selecionado";
            $config['total_rows'] = $total_rows;
            $config['per_page'] = $total_pagina;

            $this->pagination->initialize($config);

            $data['total_rows'] = $config['total_rows'];
            $data['pagination_vendas'] = $this->pagination->create_links();
            $data['vendas'] = $vendas;
            
            return $data;
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }
    
    
    function autocomplete()
    {    
        $query= $this->facade->searchCategoriaNome();
        
        foreach($query->result() as $row):
        header("Content-Type: text/plain; charset={$this->config->item("charset")}");
        echo $row->nome;

        endforeach;    
    } 

}
